package Basic

import scala.util.control.Breaks.{break, breakable}

object 循环 {
  def main(args: Array[String]): Unit = {
    //    var i = 9
    //    while (i > 0) {
    //      i -= 1
    //      printf("i is %d\n", i)
    //    }
    //    var x = 0
    //    do {
    //      x += 1
    //      println(x)
    //    } while (x < 5)

    /**
     * for循环单个生成器
     */
    //循环输出1-5
    //    for (i <- 1 to 5) println(i)
    //    //跳着输出
    //    for (i <- 1 to 5 by 2) println(i)
    //    //跳着输出且过滤
    //    for (i <- 1 to 5 by 2 if i % 2 == 0) println(i)

    /**
     * 多个生成器
     */
    //    for (i <- 1 to 5; j <- 1 to 3) println(i * j)

    //    var r = for (i <- Array(1, 2, 3, 4, 5) if i % 2 == 0) yield {
    //      println(i); i
    //    }
    //    r.foreach(println(_))

    /**
     * 为了提前终止整个循环或者跳到下一个循环，Scala没有break和continue关键字
     * Scala提供了一个Breaks类（位于包scala.util.control）。Breaks类有两个方法用于对循环结构进行控制，即breakable和break
     */
    //break
    val array = Array(1, 3, 10, 5, 4)
    breakable {
      for (i <- array) {
        if (i > 5) break
        println(i)
      }
    }
    println("**********************")
    for (i <- array) {
      breakable {
        if (i > 5) break
        println(i)
      }
    }
  }
}
